//
//  UIImage+ACExt.h
//  ACFramework
//
//  Created by caoyq on 2018/5/23.
//

#import <UIKit/UIKit.h>

@interface UIImage (ACExt)

/**
 获取本地的 image.xcassets 中AppIcon系统图标

 @return instance of UIImage.
 */
+ (UIImage *)localAppIcon;

#pragma mark - 截图

/**
 屏幕截图。正常截图，开启摄像头之后没法截图。
 
 @return instance of UIImage.
 */
+ (UIImage *)ac_screenShot;

/**
 屏幕截图。既能正常截图，也能在摄像头开启的情况下截图。

 @return instance of UIImage.
 */
+ (UIImage *)ac_screenShotFromCaptureDevice;

/**
 在指定视图的某个区域上截图，得到该区域的一张图片。

 @param view 指定视图
 @param rect 区域范围
 @return instance of UIImage.
 */
+ (UIImage*)ac_imageFromView:(UIView *)view rect:(CGRect)rect;

#pragma mark - color

/**
 根据颜色生成图片
 
 @param color 目标颜色
 @param alpha 图片透明度
 @return instance of UIImage.
 */
+ (UIImage *)ac_getImageWithColor: (UIColor *)color alpha: (CGFloat)alpha;

/**
 获取图片某一个点处的颜色
 
 @param point 点坐标
 @return instance of UIColor.
 */
- (UIColor *)ac_colorAtPoint:(CGPoint)point;

/**
 转化为灰度图片.
 
 解释：彩色照变为黑白照的样子
 
 @return instance of UIImage.
 */
- (UIImage *)ac_convertToGrayImage;

#pragma mark - 高斯模糊

/**
 设置高斯模糊图片.
 
 不是和系统的UIVisualEffectView一样添加蒙层，是直接渲染模糊图片处理.
 
 需要添加 Accelerate.framework框架，vImage操作图片.

 @param ratio 模糊系数:0~1，越高越
 @return instance of UIImage.
 */
- (UIImage *)ac_setBlurImageWithRatio: (CGFloat)ratio;

#pragma mark - 图片切割等操作

/**
 给图片设置弧度

 @param radius 弧度
 @return 带有弧度的图片
 */
- (UIImage *)ac_setRadius: (CGFloat)radius;

/**
 在原图的一定范围内，进行切割得到新图片

 @param rect 切割范围
 @return 切割后固定尺寸的图片
 */
- (UIImage *)ac_getImageInRect: (CGRect)rect;

/**
 得到任意尺寸的图片.
 
 原图尺寸进行缩放得到目标尺寸图，所以目标尺寸和原图尺寸比例不一致，结果图存在变形.（是变形还是被裁剪了需要确认）

 @param size 目标尺寸
 @return 固定尺寸的新图
 */
- (UIImage *)ac_getImageWithSize: (CGSize)size;

/**
 得到圆形图，默认切割.

 @return 圆形图
 */
- (UIImage *)ac_getCircleImage;

/**
 得到一个内切圆形状的图片.
 
 如果允许切割那么必定是圆；如果不允许切割，那么遇到长方形的图就是椭圆.
 
 切割是以原图中心为原点，最短边为半径进行画圆切割.

 @param allowClip 是否允许切割
 @return 圆形图片
 */
- (UIImage *)ac_getCircleImageAllowClip: (BOOL)allowClip;

/**
 得到指定size的内切圆形状图片.
 
 可设置边框宽度和颜色、图片的背景色.
 
 @param size 目标圆图尺寸
 @param backgroundColor 背景色
 @param lineColor 边框颜色
 @param lineWidth 边框宽度
 @return instance of UIImage.
 */
- (UIImage *)ac_getCircleImageWithSize:(CGSize )size backgroundColor:(UIColor *)backgroundColor lineColor:(UIColor *)lineColor lineWidth:(CGFloat)lineWidth;

#pragma mark - 图片旋转与还原

/**
 图片旋转

 @param angle 旋转角度
 @return 旋转后的图片
 */
- (UIImage *)ac_rotateWithAngle: (CGFloat)angle;

/**
 针对内部被旋转的图片进行还原.
 
 场景：有时候从相册获取的图片发生了旋转.

 @return 还原后的图片
 */
- (UIImage *)ac_alwaysOrientationUp;

#pragma mark - 图片加logo

/**
 * 在图片下方添加一行文字，拼成一个新的图片。
 *
 * 当前方法只是一个参考，可以应用到给图片加水印加备注等。

 @param text 添加的文字
 @return 添加文字后的image
 */
- (UIImage *)imageWithLogoText:(NSString *)text;

@end
